import { ReactNode } from "react";

// 所有表格栏目标题接口
export interface ITColumns {
  readonly title: string | ReactNode;
  readonly dataIndex: string;
  readonly key: string;
  readonly width?: number | string;
  readonly render?: any;
  readonly align?: any;
  readonly fixed?: any;
}

// 字典值接口
export interface ITDictValue {
  id?: string;
  pid: string;
  label: string;
  cnlabel: string;
  value: string;
  desc: string;
  sort: number;
  key: number;
}

// 试剂详情接口
export interface ITReagent {
  readonly id?: string;

  key?: number;

  // 名称
  readonly name: string;

  // 中文名
  readonly cnname: string;

  // 分子表达式
  readonly formula: string;

  // casno码
  readonly casno: string;

  // 密度
  readonly density: string;

  // 分子量
  readonly mw: number;

  // 结构式
  structural: string;

  // 类型
  readonly type: string;

  // 是否易挥发
  volatile?: boolean;

  // 是否粘稠
  viscose?: boolean;

  // 熔点
  mp: string;

  // 沸点
  bp: string;

  // 缩写
  abbreviation: string;

  // 百分含量
  percentage: number;

  // 备注
  readonly note?: string;

  // 所属用户
  user?: string;
}

export interface ITBadResp {
  msg: string;
}

// 用户详情接口
export interface ITUserInfo {
  account: string;
  id: string;
  privilege: string;
  key?: number;
}

// 试剂瓶接口
export interface ITBottle {
  readonly id?: string;

  key?: number;

  // 名称
  readonly name: string;

  // 高度
  readonly height: number;

  // 直径
  readonly diameter: number;

  // 深度
  readonly depth: number;

  // 容量
  readonly volume: number;

  // 形状
  readonly shape: string;
}

// 试剂架属性
export interface ITShelf {
  readonly id?: string;

  key?: number;

  // 架子名称
  name: string;

  // 架子试剂瓶类型
  bottleType: string;

  // 架子类型
  rackType: string;

  // 架子长度
  length: number;

  // 架子宽度
  wide: number;

  // 架子高度
  height: number;

  // 排数
  row: number;

  // 列数
  column: number;

  // 排间距
  rowSpace: number;

  // 列间距
  columnSpace: number;

  // 第一列横向偏移
  offsetx: number;

  // 第一排纵向偏移
  offsety: number;

  // 瓶子列表
  bottleList?: ITShelfBottleInfo[];
}

export interface ITShelfBottleInfo {
  // 瓶子槽位名
  name: string;

  // 自动计算的横坐标
  autox?: number;

  // 自动计算的纵坐标
  autoy?: number;

  // 瓶子直径
  diameter?: number;

  // 排序号
  rowIndex?: number;

  // 列序号
  colIndex?: number;

  // 横坐标
  x?: number;

  // 纵坐标
  y?: number;
}

// 试剂架示例属性
export interface ITShelfPlane {
  // 架子长度
  length?: number;

  // 架子宽度
  wide?: number;

  // 排数
  row?: number;

  // 列数
  column?: number;

  // 排间距
  rowSpace?: number;

  // 列间距
  columnSpace?: number;

  // 第一列横向偏移
  offsetx?: number;

  // 第一排纵向偏移
  offsety?: number;

  // 瓶子直径
  diameter?: number;

  // 瓶子类型 圆形或者矩形
  bottleShape?: string;

  // 瓶子列表
  bottleList?: ITShelfBottleInfo[];
}

export interface ITWorkbenchSlot {
  id?: string;

  name: string;

  x: number;

  y: number;
}

// 工作台属性
export interface ITWorkbench {
  readonly id?: string;

  key?: number;

  // 工作台名称
  name?: string;

  // 排(试剂)
  row?: number;

  // 列(试剂)
  column?: number;

  // 排(实验)
  rrow?: number;

  // 列(实验)
  rcolumn?: number;

  slotList?: ITWorkbenchSlot[];
}

interface ITDesingerUserInfo {
  account: string;
  id: string;
}

interface ITDesingerreagentsBottleItem {
  // 试剂id
  reagentId: string;

  // 数量，会随着被使用增减
  amount: number;

  // 初始数量，不会随着使用增减
  defaultAmount: number;
}

type PartialITDesingerreagentsBottleItem =
  Partial<ITDesingerreagentsBottleItem>;

interface ITDesingerreagentsItem {
  // 试剂瓶所在位置名
  [bottleName: string]: PartialITDesingerreagentsBottleItem;
}

interface ITDesingerreagent {
  // 试剂架插槽名
  [slotName: string]: ITDesingerreagentsItem;
}

// 实验设计属性
export interface ITDesinger {
  readonly id?: string;

  key?: number;

  // 工作台名称
  name: string;

  // 工作台id
  workbench: string;

  // 实验描述
  desc: string;

  // 实验步骤
  step: number;

  // 用户信息
  userInfo: ITDesingerUserInfo;

  // 创建时间
  createdTime: number;

  // 更新时间
  updateTime: number;

  reactorSlotShelf?: any;

  reagents?: ITDesingerreagent;

  reactors?: any;

  reagentsort?: any;

  slotShelf?: any;

  // 反应温度
  temperature: number;

  // 反应时间
  reactionTime: number;

  // 预设实验台id
  expTable: string;
}

export interface ITDBReactorInfo {
  amount: number;
  tubeName: string;
}

// interface ITDBInfo {
//   reagentId: string;
//   amount: number;
//   defaultAmount: number;
//   id?: string;
//   reactors?: ITDBReactorInfo[];
// }

interface ITDBReagentInfo {
  reagentId: string;
  amount?: number | undefined;
  mmol: number;
  weight: number;
  volume: number;
  type?: number;
  defaultAmount: number;
  id?: string;
  reactors?: ITDBReactorInfo[];
}

interface ITDBInfo {
  [bottleName: string]: ITDBReagentInfo;
}

// interface ITDesignerBottle {
//   [bottleName: string]: ITDBInfo;
// }

// 实验试剂信息
export interface ITDesignerReagent {
  [slotName: string]: ITDBInfo;
}

interface ITReactReagentFrom {
  amount: number;
  id: string;
  uid: string;
  _id?: string;
}
// 反应试剂信息
export interface ITDReactReagent {
  _id?: string;
  amount: number;
  mmol: number;
  volume: number;
  weight: number;
  tubeName: string;
  bottleName?: string;
  reagentid: string;
  reactorid: string;
  designerId: string;
  id: string;
  step: number;
  type?: number;
  from?: ITReactReagentFrom[];
}

/**
 * 预设工作台
 */

interface ITShelfValue {
  shelf: string;
}

interface ITShelfKey {
  [slotname: string]: ITShelfValue;
}

export interface ITExpTable {
  readonly _id?: string;
  id?: string;
  key?: number;
  name: string;
  desc: string;
  workbench: string;
  slotShelf: ITShelfKey;
  reactorSlotShelf: ITShelfKey;
}

export interface ITReagentTypeTitle {
  type: number;
  title: string;
}

// 加入的药剂信息
export interface ITMmolWeightVolume {
  mmol: number | null;
  weight: number | null;
  volume: number | null;
}

export interface ITFillReagent extends ITMmolWeightVolume {
  type: number;
}
